From 6f955a7df67222b6ee4b2502eb5e1428f9c91d20 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 12 Jun 2015 23:55:30 -0400 Subject: [PATCH] Redo font map support in GtkFontChooser We can't add properties to the interface, since it breaks 3rd party implementations of the GtkFontChooser interface. These exist, for example in gnumeric. So, instead of a new property, add getter/setter vfuncs. --- gtk/gtkfontbutton.c | 24 ++++++++++++++---------- gtk/gtkfontchooser.c | 20 +++++--------------- gtk/gtkfontchooser.h | 7 ++++++- gtk/gtkfontchooserutils.c | 18 +++++++++++++++--- gtk/gtkfontchooserutils.h | 1 - gtk/gtkfontchooserwidget.c | 24 ++++++++++++++---------- 6 files changed, 54 insertions(+), 40 deletions(-) diff --git a/gtk/gtkfontbutton.c b/gtk/gtkfontbutton.c index 492c4d297b..98620c15b0 100644 --- a/gtk/gtkfontbutton.c +++ b/gtk/gtkfontbutton.c @@ -386,9 +386,11 @@ gtk_font_button_get_font_desc (GtkFontButton *font_button) } static void -gtk_font_button_set_font_map (GtkFontButton *font_button, - PangoFontMap *font_map) +gtk_font_button_font_chooser_set_font_map (GtkFontChooser *chooser, + PangoFontMap *font_map) { + GtkFontButton *font_button = GTK_FONT_BUTTON (chooser); + if (g_set_object (&font_button->priv->font_map, font_map)) { PangoContext *context; @@ -398,11 +400,17 @@ gtk_font_button_set_font_map (GtkFontButton *font_button, context = gtk_widget_get_pango_context (font_button->priv->font_label); pango_context_set_font_map (context, font_map); - - g_object_notify (G_OBJECT (font_button), "font-map"); } } +static PangoFontMap * +gtk_font_button_font_chooser_get_font_map (GtkFontChooser *chooser) +{ + GtkFontButton *font_button = GTK_FONT_BUTTON (chooser); + + return font_button->priv->font_map; +} + static void gtk_font_button_font_chooser_notify (GObject *object, GParamSpec *pspec, @@ -421,6 +429,8 @@ gtk_font_button_font_chooser_iface_init (GtkFontChooserIface *iface) iface->get_font_face = gtk_font_button_font_chooser_get_font_face; iface->get_font_size = gtk_font_button_font_chooser_get_font_size; iface->set_filter_func = gtk_font_button_font_chooser_set_filter_func; + iface->set_font_map = gtk_font_button_font_chooser_set_font_map; + iface->get_font_map = gtk_font_button_font_chooser_get_font_map; } G_DEFINE_TYPE_WITH_CODE (GtkFontButton, gtk_font_button, GTK_TYPE_BUTTON, @@ -655,9 +665,6 @@ gtk_font_button_set_property (GObject *object, case PROP_SHOW_SIZE: gtk_font_button_set_show_size (font_button, g_value_get_boolean (value)); break; - case GTK_FONT_CHOOSER_PROP_FONT_MAP: - gtk_font_button_set_font_map (font_button, g_value_get_object (value)); - break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); break; @@ -702,9 +709,6 @@ gtk_font_button_get_property (GObject *object, case PROP_SHOW_SIZE: g_value_set_boolean (value, gtk_font_button_get_show_size (font_button)); break; - case GTK_FONT_CHOOSER_PROP_FONT_MAP: - g_value_set_object (value, font_button->priv->font_map); - break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); break; diff --git a/gtk/gtkfontchooser.c b/gtk/gtkfontchooser.c index d295ce042c..e2ed3a0188 100644 --- a/gtk/gtkfontchooser.c +++ b/gtk/gtkfontchooser.c @@ -105,18 +105,6 @@ gtk_font_chooser_default_init (GtkFontChooserInterface *iface) TRUE, GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - /** - * GtkFontChooser:font-map: - * - * A custom font map to use for this widget, instead of the - * default one. - * - * Since: 3.18 - */ - g_object_interface_install_property (iface, - g_param_spec_object ("font-map", P_("Font map"), P_("A custom PangoFontMap"), - PANGO_TYPE_FONT_MAP, - GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); /** * GtkFontChooser::font-activated: * @self: the object which received the signal @@ -466,7 +454,8 @@ gtk_font_chooser_set_font_map (GtkFontChooser *fontchooser, g_return_if_fail (GTK_IS_FONT_CHOOSER (fontchooser)); g_return_if_fail (fontmap == NULL || PANGO_IS_FONT_MAP (fontmap)); - g_object_set (fontchooser, "font-map", fontmap, NULL); + if (GTK_FONT_CHOOSER_GET_IFACE (fontchooser)->set_font_map) + GTK_FONT_CHOOSER_GET_IFACE (fontchooser)->set_font_map (fontchooser, fontmap); } /** @@ -483,11 +472,12 @@ gtk_font_chooser_set_font_map (GtkFontChooser *fontchooser, PangoFontMap * gtk_font_chooser_get_font_map (GtkFontChooser *fontchooser) { - PangoFontMap *fontmap; + PangoFontMap *fontmap = NULL; g_return_val_if_fail (GTK_IS_FONT_CHOOSER (fontchooser), NULL); - g_object_get (fontchooser, "font-map", &fontmap, NULL); + if (GTK_FONT_CHOOSER_GET_IFACE (fontchooser)->get_font_map) + fontmap = GTK_FONT_CHOOSER_GET_IFACE (fontchooser)->get_font_map (fontchooser); return fontmap; } diff --git a/gtk/gtkfontchooser.h b/gtk/gtkfontchooser.h index 84693c1fe4..98e3baf7e2 100644 --- a/gtk/gtkfontchooser.h +++ b/gtk/gtkfontchooser.h @@ -70,8 +70,13 @@ struct _GtkFontChooserIface void (* font_activated) (GtkFontChooser *chooser, const gchar *fontname); + /* More methods */ + void (* set_font_map) (GtkFontChooser *fontchooser, + PangoFontMap *map); + PangoFontMap * (* get_font_map) (GtkFontChooser *fontchooser); + /* Padding */ - gpointer padding[12]; + gpointer padding[10]; }; GDK_AVAILABLE_IN_3_2 diff --git a/gtk/gtkfontchooserutils.c b/gtk/gtkfontchooserutils.c index ff8ca68110..36ebd8bcd0 100644 --- a/gtk/gtkfontchooserutils.c +++ b/gtk/gtkfontchooserutils.c @@ -63,6 +63,19 @@ delegate_set_filter_func (GtkFontChooser *chooser, data_destroy); } +static void +delegate_set_font_map (GtkFontChooser *chooser, + PangoFontMap *map) +{ + gtk_font_chooser_set_font_map (get_delegate (chooser), map); +} + +static PangoFontMap * +delegate_get_font_map (GtkFontChooser *chooser) +{ + return gtk_font_chooser_get_font_map (get_delegate (chooser)); +} + static void delegate_notify (GObject *object, GParamSpec *pspec, @@ -121,9 +134,6 @@ _gtk_font_chooser_install_properties (GObjectClass *klass) g_object_class_override_property (klass, GTK_FONT_CHOOSER_PROP_SHOW_PREVIEW_ENTRY, "show-preview-entry"); - g_object_class_override_property (klass, - GTK_FONT_CHOOSER_PROP_FONT_MAP, - "font-map"); } /** @@ -144,6 +154,8 @@ _gtk_font_chooser_delegate_iface_init (GtkFontChooserIface *iface) iface->get_font_face = delegate_get_font_face; iface->get_font_size = delegate_get_font_size; iface->set_filter_func = delegate_set_filter_func; + iface->set_font_map = delegate_set_font_map; + iface->get_font_map = delegate_get_font_map; } /** diff --git a/gtk/gtkfontchooserutils.h b/gtk/gtkfontchooserutils.h index 0a8f9f8d8d..7c92a64947 100644 --- a/gtk/gtkfontchooserutils.h +++ b/gtk/gtkfontchooserutils.h @@ -37,7 +37,6 @@ typedef enum { GTK_FONT_CHOOSER_PROP_FONT_DESC, GTK_FONT_CHOOSER_PROP_PREVIEW_TEXT, GTK_FONT_CHOOSER_PROP_SHOW_PREVIEW_ENTRY, - GTK_FONT_CHOOSER_PROP_FONT_MAP, GTK_FONT_CHOOSER_PROP_LAST } GtkFontChooserProp; diff --git a/gtk/gtkfontchooserwidget.c b/gtk/gtkfontchooserwidget.c index 7464f74fe8..f519b82cd9 100644 --- a/gtk/gtkfontchooserwidget.c +++ b/gtk/gtkfontchooserwidget.c @@ -171,8 +171,6 @@ static void gtk_font_chooser_widget_cell_data_func (GtkTreeViewColum GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer user_data); -static void gtk_font_chooser_widget_set_font_map (GtkFontChooserWidget *fontchooser, - PangoFontMap *fontmap); static void gtk_font_chooser_widget_iface_init (GtkFontChooserIface *iface); @@ -203,9 +201,6 @@ gtk_font_chooser_widget_set_property (GObject *object, case GTK_FONT_CHOOSER_PROP_SHOW_PREVIEW_ENTRY: gtk_font_chooser_widget_set_show_preview_entry (fontchooser, g_value_get_boolean (value)); break; - case GTK_FONT_CHOOSER_PROP_FONT_MAP: - gtk_font_chooser_widget_set_font_map (fontchooser, g_value_get_object (value)); - break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -234,9 +229,6 @@ gtk_font_chooser_widget_get_property (GObject *object, case GTK_FONT_CHOOSER_PROP_SHOW_PREVIEW_ENTRY: g_value_set_boolean (value, gtk_font_chooser_widget_get_show_preview_entry (fontchooser)); break; - case GTK_FONT_CHOOSER_PROP_FONT_MAP: - g_value_set_object (value, fontchooser->priv->font_map); - break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -1231,9 +1223,10 @@ gtk_font_chooser_widget_set_show_preview_entry (GtkFontChooserWidget *fontchoose } static void -gtk_font_chooser_widget_set_font_map (GtkFontChooserWidget *fontchooser, - PangoFontMap *fontmap) +gtk_font_chooser_widget_set_font_map (GtkFontChooser *chooser, + PangoFontMap *fontmap) { + GtkFontChooserWidget *fontchooser = GTK_FONT_CHOOSER_WIDGET (chooser); GtkFontChooserWidgetPrivate *priv = fontchooser->priv; if (g_set_object (&priv->font_map, fontmap)) @@ -1255,6 +1248,15 @@ gtk_font_chooser_widget_set_font_map (GtkFontChooserWidget *fontchooser, } } +static PangoFontMap * +gtk_font_chooser_widget_get_font_map (GtkFontChooser *chooser) +{ + GtkFontChooserWidget *fontchooser = GTK_FONT_CHOOSER_WIDGET (chooser); + GtkFontChooserWidgetPrivate *priv = fontchooser->priv; + + return priv->font_map; +} + static void gtk_font_chooser_widget_set_filter_func (GtkFontChooser *chooser, GtkFontFilterFunc filter, @@ -1281,4 +1283,6 @@ gtk_font_chooser_widget_iface_init (GtkFontChooserIface *iface) iface->get_font_face = gtk_font_chooser_widget_get_face; iface->get_font_size = gtk_font_chooser_widget_get_size; iface->set_filter_func = gtk_font_chooser_widget_set_filter_func; + iface->set_font_map = gtk_font_chooser_widget_set_font_map; + iface->get_font_map = gtk_font_chooser_widget_get_font_map; } -- 2.30.2